package main

import (
	"fmt"
	"os"
	"os/signal"
	"syscall"
)

//示例地址:https://github.com/polaris1119/The-Golang-Standard-Library-by-Example/blob/master/chapter16/16.03.md
func main() {
	// 忽略 Control-C (SIGINT)
	// os.Interrupt 和 syscall.SIGINT 是同义词
	//1.如果先调用 Ignore，在调用 Notify，接着调用 Reset/Stop 的话，会回到 Ingore 的效果.
	signal.Ignore(os.Interrupt)

	c1 := make(chan os.Signal, 2)
	// Notify SIGHUP

	//1.类似于绑定信号处理程序。将输入信号转发到 chan c。如果没有列出要传递的信号，会将所有输入信号传递到c1
	signal.Notify(c1, syscall.SIGHUP)

	go func() {
		for {
			switch <-c1 {
			case syscall.SIGHUP:
				fmt.Println("sighup, reset sighup")
				//1.取消之前使用 Notify 对信号产生的效果；如果没有参数，则所有信号处理都被重置,再次发起SIGHUP信号的时候,不会被捕捉,而是使用系统默认的信号处理机制处理信号.
				signal.Reset(syscall.SIGHUP)
			}
		}
	}()

	select {}
}
